// Пространство имен
var app = {};

/**
* ID перетаскиваемого класса
*/
app.dragUnitId;

// При загрузке DOM
$(function() {
    // Создание unit при двойном щелчке на рабочую область
    $("#workspace").dblclick(app.addUnit);

    // При наведение на поля редактирования связи пожсвечиваем редактируемый unit
    $("#link-edit>*").live({
        "mouseenter": function() {
            var id;
            if($(this).hasClass("unit1")){
                id = $("#link-edit").attr("id_1");
            }
            if($(this).hasClass("unit2")) {
                id = $("#link-edit").attr("id_2");
            }
            if(id != undefined) {
                $(".unit#" + id).addClass("active");
            }
        },
        "mouseleave": function() {
            $(".unit.active").removeClass("active");
        }
    });

    // Редактирование связи
    $("#link-edit").children("ul").children("li").click(function() {
        if($(this).parent().children("li:visible").size() == 1) {
            // Показываем все наименования
            $(this).parent().children().addClass('active');
        } else {
            $(this).parent().children().removeClass("active");
            $(this).addClass("active");
        }
    });
    
    // Сохранение новой связи
    $("#link-edit").children(".ok").click(function() {
        var panel = $(this).parent(),
        unit1Arrow = panel.children(".unit1.arrows").children("li.active").removeClass("active"),
        unit2Arrow = panel.children(".unit2.arrows").children("li.active").removeClass("active"),
        line = panel.children(".line").children("li.active").removeClass("active");
        
        if(unit1Arrow.size() == 1 && unit2Arrow.size() == 1 && line.size() == 1) {
            app.links.set(line.parent().attr("id_1"), line.parent().attr("id_2"), {
                unit1Arrow: unit1Arrow.attr("class"),
                unit1Multi: panel.children(".unit1.multi").val(),
                unit1Text: panel.children(".unit1.text").val(),
                line: line.attr("class"),
                unit2Text: panel.children(".unit2.text").val(),
                unit2Multi: panel.children(".unit2.multi").val(),
                unit2Arrow:  unit2Arrow.attr("class")
            });
        }
        $("#link-edit").hide();
    });

    // Изменение связи
    $("#workspace .link .clickable_link").live("click", function() {
        var link = $(this).parent(),
        id_1 = link.attr("id_1"),
        id_2 = link.attr("id_2");
        app.links.edit(id_1, id_2);
        $("#link-edit").show();
    });

    // Добавление новых аттрибутов и методов
    $(".unit .body li.add").live("click", function() {
        var text = ($(this).parent().attr("class") == "attributes") ? "attribute" : "method",
        row = '<li class="' + text + ' editable" state="view"><span class="value">' + text + '()</span><input class="edit" value="" /></li>';
        $(this).before(row).parent().find("li[class!='add']:last").attr("state", "edit").children(".value").hide().parent().children(".edit").val("").width("50px").show().focus();
    });

    // Обновление классов при нажатие на рабочую область
    $("#polygon").click(function(event) {
        if(!$(event.target).parents().hasClass("unit")) {
            $("#workspace .unit .editable[state='edit'] .edit").each(function() {
                app.saveChange(this);
            });
        }
    });

    // Редактирование поля в классе
    $("#workspace .unit .editable[state='view'] .value").live("click", function() {
        var j = $(this);
        j.hide().parent().attr("state", "edit").children(".edit").width(j.width()).val(j.text()).show().select();
    });

    // Сохранение поля после редактирования
    $("#workspace .unit .editable[state='edit'] .edit").live("keyup", function(e) {
        if(e.keyCode == 13) {
            app.saveChange(this);
        };
    });
});

